import http from 'wechat-http'
/* 网络请求封装 */

// 接口基础地址
http.baseURL = 'https://live-api.itheima.net'
// 请求拦截器
http.intercept.request = (options) => {
  /* 获取本地token */
  const token = getApp().getToken()
  // 合并头信息
  options.header = {
    // 权限认证
    Authorization: `Bearer ${token}`,
    // 默认头信息
    ...options.header,
  }
  // 拦截器处理后的请求参数
  return options
}

// 响应拦截
http.intercept.response = async ({ statusCode, data, config }) => {
  // 获取本地  refreshToken
  const refreshToken = getApp().getRefreshToken()
  /* 当前服务器返回状态码为401 且  refreshToken过期 跳转至登录页*/
  if (data.code === 401 && config.url.includes('/refreshToken')) {
    const route = getApp().getRoute()
    return wx.redirectTo({
      url: `/pages/login/index?redirectURl=${route}`,
    })
  }

  if (data.code === 401 && refreshToken) {
    const { data } = await http({
      url: '/refreshToken',
      method: 'POST',
      header: {
        Authorization: `Bearer ${refreshToken}`,
      },
    })
    // 获得新token
    const newToken = data.token
    // 更新本地token
    getApp().setToken(newToken)
    // 解构得到请求头
    const { header } = config
    // 设置请求头
    header.Authorization = `Bearer ${newToken}`
    // 重新发起请求
    return http(config)
  }

  if (statusCode === 500) return wx.utils.toast('服务器端异常')

  if (statusCode === 502) return wx.utils.toast('服务器端正在部署，请稍等')

  // console.log(result.config) // 发起请求时的参数
  // 拦截器处理后的响应结果
  return data
}

// 作为模块导出
export default http

// 也可挂载到 wx 全局命名空间
wx.http = http
